1. Technical Field
The present invention relates in general to an improved data processing system, and in particular to a method and system for enhanced instruction dispatch efficiency in a superscalar processor system. Still more particularly, the present invention relates to a method and system for indexing the assignment of intermediate storage buffers in a superscalar processor system.
2. Description of the Related Art
Designers of modern state-of-the-art processing systems are continually attempting to enhance performance aspects of such systems. One technique for enhancing data processing efficiency is the achievement of short cycle times and a low Cycles-Per-Instruction (CPI) ratio. An excellent example of the application of these techniques to an enhanced data processing system is the International Business Machines Corporation RISC System/6000 (RS/6000) computer. The RS/6000 system is designed to perform well in numerically intensive engineering and scientific applications as well as in multi-user, commercial environments. The RS/6000 processor employs a superscalar implementation, which means that multiple instructions are issued and executed simultaneously.
The simultaneous issuance and execution of multiple instructions requires independent functional units that can execute concurrently with a high instruction bandwidth. The RS/6000 system achieves this by utilizing separate branch, fixed point and floating point processing units which are pipelined in nature. In view of the pipelined nature of the processors in such systems, care must be taken to ensure that a result from a particular instruction which is necessary for execution of a subsequent instruction is obtained prior to dispatching the subsequent instruction. One technique for ensuring that such so-called "data dependency hazards" do not occur is the restriction of the dispatching of a particular instruction until such time as all preceding instructions have been dispatched. While this technique ensures that data dependency hazards will not occur, the performance penalty encountered utilizing this technique is substantial.
As a consequence, modern superscalar data processing systems often utilize a so-called "data dependency interlock circuit." Such circuits contain logic which operates in concert with instruction dispatch circuitry to ensure that an instruction is not dispatched until such time as a result from a preceding instruction which is necessary for correct execution of that instruction has been obtained. The amount of logic required to implement a data dependency interlock circuit is directly proportional to the number of source operands within each instruction. A source operand is a field within an instruction which is utilized to access an operand within a register file for utilization in execution of that instruction.
While data dependency interlock circuits permit data dependency hazards to be avoided without encountering the substantial performance penalty described above, the design and implementation of data dependency interlock circuits for instructions which include larger numbers of source and destination operands becomes quite complex. The dependency interlocks inhibit dispatch of dependent instructions which prevent following instructions, which may be independent and executable, from entering the dispatcher to be dispatched and executed.
The data dependency hazards which occur with the simultaneous execution of multiple instructions in a single processor cycle have also been addressed by utilizing an approach known as "register renaming." Register renaming is a technique utilized to temporarily place the results of a particular instruction into a register for potential use by later instructions prior to the time the final result from an instruction is placed within a register file. Register renaming is generally accomplished by providing a register file array with extra locations and a pointer arrangement to identify particular physical registers which have been assigned to logical registers. Selected prior art approaches also utilize multiple register file arrays to provide many "read" ports for data or for holding previous results for backup in the case of exceptions. While this technique provides the ability to simultaneously dispatch and execute multiple instructions where serial execution might otherwise be necessary, a problem exists with the dispatching of instructions to execution units utilizing such techniques. The requirement that an instruction utilize particular data or operands for execution has generally rendered it impossible to dispatch an instruction and associated data to an execution unit within a single processor cycle since the dispatch unit, or the execution unit must generally perform a complex read through a lookup table or pointer system to determine when a temporary register contains the required data for execution of the instruction.
Furthermore, certain systems may rename a register more than once in a single processor cycle. Consequently, in those systems which utilize a lookup table for register renaming, a massive lookup table may be necessary in order to be able to determine the most recently assigned rename buffer for a particular register.
It should therefore be apparent that a need exist for a method and system which permits instruction dispatch within a superscalar processor system within a single processor cycle by permitting data or operands to be dispatched promptly with the instructions.